linux 终端崩溃排查

八月 14, 2025 #terminal #fzf

现象

第一次发生崩溃是在使用Ctrl+R 进行历史命令搜索时发生, 按下Ctrl+R后, 1秒内终端就直接退出了

排查过程

重置终端

# 重置gnome-terminal配置
dconf reset -f /org/gnome/terminal/
# 或完全删除配置
rm -rf ~/.config/gnome-terminal/

检查日志

journalctl -xe | grep -i terminal
dmesg | grep -i error

尝试其他终端

apt install tilix
tilix

怀疑fzf

首先 Ctrl + R 绑定的程序是fzf

bindkey | grep -Ei '\^r'

为什么新安装的终端不会崩溃呢?

strace -f -o fzf.log fzf
strace -f -e trace=pipe,write,socket -o debug.log fzf
yes | head -n 46149 | fzf
seq 50000 | fzf

换终端模拟器

seq 1000000 | fzf

我切换了kitty终端,发现是正常的, 怀疑的确是VTE的bug导致的

为什么 kitty / alacritty 正常?

终端渲染引擎特点
kitty自研 GPU 加速高性能,专为大输出优化
alacrittyGPU 加速(OpenGL)极致性能,Rust 编写
gnome-terminal / tilixVTE(CPU 渲染)功能完整但性能较弱

👉 kitty 和 alacritty 使用现代渲染架构,能更高效处理 fzf 的快速滚动和高密度输出。

解决方案

续使用 kitty 或 alacritty(推荐)

这是最稳定、长期有效的方案:

# 安装 kitty
sudo apt install kitty
# 或安装 alacritty
sudo apt install alacritty

💡 推荐 kitty:功能丰富、文档完善、对 fzf/tmux 支持极佳。

升级 VTE 到 0.76+(风险较高)

Ubuntu 24.04 默认未提供新版 VTE,但您可以:

# 添加提供新版 VTE 的 PPA(需谨慎)
# 例如:https://launchpad.net/~gnome-team/+archive/ubuntu/gnome3
sudo add-apt-repository ppa:gnome-team/gnome3
sudo apt update
sudo apt install libvte-2.91-dev libvte-2.91-0

什么是 VTE?

VTE 是 GNOME Terminal、Tilix、MATE Terminal 等使用的底层终端控件库(libvte) Ubuntu 24.04 默认带的是 VTE 0.74.x,这个版本在 Gitlab issue 里已经有 “ncurses 程序在大数据输入下崩溃” 的 bug 报告,可以试试更新到 0.76+ 或从源码编译新版本。 该版本在处理高吞吐量、快速连续的 ANSI/VT100 控制序列输出时,存在缓冲区管理缺陷